[Amazon SNS] 配送ステータスが CloudWatch で確認できるようになりました!
Amazon SNS の配送ステータスが Cloud Watch で確認可能になりました
本日 Amazon SNS にアップデートがあり、Publish した通知の配送ステータスが Amazon CloudWatch で確認できるようになりました!
ということで、早速使ってみたいと思います。
設定してみる
まず Management Console を開き、SNS Application を選択した状態で「Application Actions」のメニューから「Delivery Status」を選択します。
成功時、失敗時に使用する IAM Role を指定します。
「Create IAM Roles」をクリックすると、新規作成フォームが表示されます。
いずれもデフォルトでは以下のような Policy になっています。
{ "Version": "2012-10-17", "Statement": [ { "Effect": "Allow", "Action": [ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:PutLogEvents", "logs:PutMetricFilter", "logs:PutRetentionPolicy" ], "Resource": [ "*" ] } ] }
作成が完了すると、先ほどのフォームに自動で Arn が入力されます。
以上で設定完了です。なお上記の設定は SDK を通して API 経由で設定することもできます。詳しくは公式ブログを御覧ください。
配送ステータスを見てみる
あとは Publish したあとに配送ステータスが CloudWatch で確認できるようになります。ということで Publish します。
Publish が完了すると CloudWatch の Logs に Log Group が増えています。
Log Stream で分割されているので、選択すると…
ログが出力されてました。下図は成功時のログです。Endpoint Arn や Dwell Time などが確認できます。
下図はエラー時のログです。providerResponse にエラーレスポンスが渡されるので、エラーの原因が特定しやすいです。今回は無効なトークンに対する配信だったので、Invalid Token というステータスになっていることが確認できます。
次に Metrics を見てみましょう。SNS という項目を選択すると Dwell Time の平均や Publish 数、成功数や失敗数を見ることができます。
Metric をある条件で絞り込みたいときは Log の画面の「Create Metric Filter」からカスタムフィルターを作成することもできます。
上記の例では Dwell Time が 300 以上という条件のフィルターになります。例えばエラーログで {$.delivery.statusCode=403} などとすれば、あるエラーコードの発生数なども調べることができます。
Metric Filter を作成後は Log Group に以下のように表示されます。
「Create Alarm」でアラートを設定すると、作成した Metric Filter に該当する Log が出力されたタイミングで SNS に通知することができます。
まとめ
GCM や APNs のプッシュ通知ではデバイスに通知が送れないことがよくありますが、今回ご紹介した機能を使うことでエラーハンドリングがしやすくなりました。エンドポイントまで特定できるので、通知が送れなかったユーザーに別なアプローチを行うなどといった使いかたも面白そうですね。ぜひ活用しましょう!